Open vSwitch: cоединяй и властвуй
Виртуальный коммутатор Open vSwitch: обзор возможностей и применение
Эра облачных вычислений постепенно вошла в нашу жизнь, принеся с собой множество плюсов для системных администраторов, которые теперь могут управлять целыми сетевыми фермами серверов, не вставая с удобного кресла. Однако там, где есть виртуальные машины, должна быть и виртуальная сеть, их связывающая. Небольшую виртуальную сеть создать просто, а вот когда речь заходит о десятках и сотнях виртуальных машин, без качественного виртуального коммутатора не обойтись.
![]()
Введение
Без качественных управляемых коммутаторов просто невозможно наладить правильную работу крупной сети и добиться оптимальной пропускной способности и взаимодействия между ее элементами. Хороший коммутатор предоставляет такие необходимые возможности, как организация виртуальных сетей (VLAN), QoS, агрегация каналов, зеркалирование трафика и даже функции брандмауэра. Настолько же важную роль коммутаторы играют и в виртуальных сетях, однако до недавнего времени решения, реализующие программные коммутаторы, предлагали только коммерческие организации, которые просили за них немалые деньги. За тот же Cisco Nexus 1000V для систем VMware vSphere приходилось отдавать около тысячи долларов, что пустяк в сравнении с остальными расходами на сетевую инфраструктуру, но, тем не менее, дополнительная трата средств. Вдобавок это привязка к другому коммерческому решению, за которое придется отдать еще больше. Сегодня, когда полностью открытые решения на базе KVM и Xen уже достигли того уровня развития, при котором они могут составить конкуренцию коммерческим продуктам виртуализации, нам нужен такой же открытый коммутатор, не привязанный к коммерческим решениям.
К счастью, такой продукт есть, и носит он имя Open vSwitch. Это многоуровневый коммутатор с открытым исходным кодом, разрабатываемый совместными усилиями Citrix, Red Hat, Canonical, Oracle и других компаний (в команде разработчиков есть даже человек из FreeBSD Foundation). Open vSwitch может работать как на уровне ядра, так и в пространстве пользователя, предлагая следующие возможности:
- поддержка протоколов NetFlow, sFlow, SPAN и RSPAN;
- поддержка VLAN (IEEE 802.1Q);
- механизм QoS;
- возможность агрегации портов с распределением нагрузки;
- GRE-туннелирование;
- совместимость с программным мостом Linux Bridge (brctl);
- индивидуальные политики для виртуальных машин.
Коммутатор имеет распределенный дизайн, позволяющий установить компоненты системы на множество физических машин и управлять общей виртуальной сетью, используя протокол OpenFlow, другими словами — используя любой совместимый с этим протоколом интерфейс удаленного управления коммутаторами.

Как работает OpenFlow
Установка и запуск
Open vSwitch уже можно найти в репозиториях многих дистрибутивов и портах FreeBSD, так что в большинстве случаев для его установки не понадобится особых усилий. В некоторых дистрибутивах, однако, может потребоваться ручная установка системы из исходных текстов, в особенности если дистр включает в себя устаревшую версию Open vSwitch.
Чтобы установить систему из исходников, необходимо сделать следующее:
Получить тарболл с официальной страницы Open vSwitch и распаковать его:
$ cd /tmp
$ wget http://openvswitch.org/releases/openvswitch-1.4.0.tar.gz
$ tar -xzf openvswitch-1.4.0.tar.gzЗапустить процесс сборки с помощью вызова стандартных configure и make. В том случае, если ты хочешь установить версию, работающую только в пространстве пользователя (удобно для тестирования возможностей), команды сборки будут иметь следующий вид:
$ ./configure
$ make
$ sudo make install
$Если же предполагается установка модуля ядра, configure следует вызвать с опцией «--with-linux»:
$ ./configure --with-linux=/lib/modules/`uname -r`/buildПосле этого можно загрузить модуль ядра с помощью insmod:
$ insmod datapath/linux/openvswitch.koСоздать базу настроек, которая будет использована для хранения текущей конфигурации коммутатора:
$ sudo mkdir -p /usr/local/etc/openvswitch
$ sudo ovsdb-tool create /usr/local/etc/openvswitch/conf.db vswitchd/vswitch.ovsschemaДля корректной работы коммутатора также необходим запуск сервера конфигурации, который будет принимать запросы на изменение настроек коммутатора от утилит управления (он должен работать на всех узлах, участвующих в виртуальной сети):
$ sudo ovsdb-server --remote=punix:/usr/local/var/run/openvswitch/db.sock --remote=db:Open_vSwitch,manager_options --private-key=db:SSL,private_key --certificate=db:SSL,certificate --bootstrap-ca-cert=db:SSL,cacert --pidfile --detachПосле этого базу настроек необходимо инициализировать:
$ sudo ovs-vsctl --no-wait initНаконец, можно запустить сам коммутатор, а точнее демон, ответственный за его работу:
$ sudo ovs-vswitchd --pidfile --detachДемон самостоятельно определит наличие в системе модуля openvswitch и задействует его возможности в работе.
Open vSwitch и KVM
А что такое OpenFlow?
OpenFlow — это протокол, разработанный для управления политикой прохождения сетевых пакетов в больших сетях, построенных на основе множества коммутаторов. Суть протокола не просто в том, чтобы управлять свитчами на расстоянии, — можно переложить всю работу по управлению правилами прохождения пакетов на плечи выделенного сервера, выполняющего роль контроллера. Контроллер постоянно обменивается информацией с коммутаторами и строит на основе полученных данных карту сети, после чего берет на себя управление всеми правилами обработки пакетов. Это не только повышает производительность сети за счет того, что со свитчей снимается дополнительная нагрузка, но и позволяет администратору создавать эффективные схемы прохождения пакетов из одной точки и с помощью единого интерфейса. Протокол пока еще очень молодой, но интерес к нему растет рекордными темпами. О поддержке протокола уже заявили такие производители, как Cisco, Juniper, HP, IBM и NEC, разработавшие для своих маршрутизаторов прошивки с поддержкой протокола. Многие программные маршрутизаторы также поддерживают OpenFlow.
Open vSwitch может быть использован для управления сетями виртуальных машин, построенных на основе гипервизора Xen и KVM. Однако в этом разделе мы остановимся на KVM, как на более распространенном, популярном и простом в развертывании средстве виртуализации. KVM, а точнее QEMU, для которого он выступает в качестве базы, умеет связывать виртуальные машины в сеть и обеспечивать доступ к внешним физическим сетевым интерфейсам с помощью нескольких различных методов. Среди этих методов есть как очень простой виртуальный интерфейс tun, позволяющий прокидывать туннель между виртуальным и физическим интерфейсом, так и более сложный внутриядерный механизм Linux Bridge, позволяющий объединить виртуальные машины между собой и внешним миром с помощью программного неуправляемого коммутатора. Open vSwitch, в свою очередь, использует Linux Bridge в качестве базы, превращая его в сложный управляемый свитч. Это значит, что если ты уже имел дело с настройкой виртуальной сети на основе Linux Bridge, то легко разберешься с тем, как работает vSwitch. Фактически все, что понадобится сделать, — это изучить несколько новых команд, предназначенных для управления возможностями коммутатора, тогда как вся остальная виртуальная сетевая инфраструктура останется неизменной.

Open vSwitch и его возможности
В качестве демонстрации приведу пример настройки простейшей сети на основе голого QEMU (то есть без libvirt и прочих надстроек типа virsh). Допустим, нам необходимо сделать так, чтобы каждая виртуальная машина автоматически подключалась к нашему коммутатору во время старта. Нет ничего проще. Для начала создадим два стартовых скрипта для управления виртуальной сетью:
$ sudo vi /etc/ovs-ifup
#!/bin/shswitch='br0'
/sbin/ifconfig $1 0.0.0.0 up
ovs-vsctl add-port ${switch} $1$ sudo vi /etc/ovs-ifdown
#!/bin/shswitch='br0'
/sbin/ifconfig $1 0.0.0.0 down
ovs-vsctl del-port ${switch} $1
Первый будет автоматически поднимать виртуальный сетевой интерфейс, созданный эмулятором, и подключать его к коммутатору. Второй, соответственно, отключать. Для управления коммутатором здесь используется стандартная утилита ovs-vsctl, подробнее о которой я расскажу ниже, хотя мы могли бы использовать для тех же целей старый добрый brctl (команда «brctl addif ${switch} $1»), и сути это бы не поменяло.
Теперь создадим виртуальный коммутатор. Сделать это можно опять же с помощью brctl:
$ sudo brctl addbr br0
Или вызовом утилиты ovs-vsctl:
$ sudo ovs-vsctl add-br br0
Далее подключаем к свитчу физический сетевой интерфейс:
$ sudo ovs-vsctl add-port br0 eth0
И запускаем виртуальную машину:
$ sudo qemu-kvm -m 512 -net nic,maddr=00:11:22:EE:EE:EE -net tap,script=/etc/ovs-ifup,downscript=/etc/ovs-ifdown-drive file=/образ-диска.img,boot=on
После запуска виртуальная машина автоматически получит собственный виртуальный интерфейс (tap0, tap1, tap2 и так далее), который будет подключен к коммутатору с помощью стартового скрипта. Просмотреть информацию о свитче и подключенных машинах можно с помощью одной из двух следующих команд:
$ sudo brctl show
$ sudo ovs-vsctl list ports br0
Теперь коммутатор готов к работе и настройке. В случае использования более высокоуровневых средств управления виртуальными машинами, вроде графического virt-manager, процесс будет еще проще. Достаточно выбрать в настройках сети подключение с помощью Linux Bridge и перейти к чтению следующего раздела статьи.

Чтобы использовать Open vSwitch в сочетании с virt-manager, достаточно прописать в настройках сети имя нужного коммутатора
Продвинутые возможности
Теперь, когда сеть настроена, поговорим о том, что может дать Open vSwitch в сравнении со стандартным мостом, встроенным в ядро Linux. Выше я уже писал о возможностях свитча, а также о том, что он поддерживает протокол удаленного управления OpenFlow, а значит, фактически совместим со всеми контроллерами удаленного управления коммутаторами на основе этого протокола. В частности, управление можно осуществлять с помощью открытого OpenFlow-контроллера FloodLight (floodlight.openflowhub.org) и консолей управления на его основе, таких как, например, FlowScale (openflowhub.org/display/FlowScale). Однако в этой статье мы говорим об Open vSwitch, поэтому сконцентрируемся на управлении с помощью стандартных команд, включенных в пакет коммутатора. В предыдущем разделе статьи мы уже вскользь коснулись главного инструмента управления Open vSwitch — утилиты ovs-vsctl. С ее помощью можно изменять любые настройки коммутатора, начиная от самых простых, например добавление и удаление портов и свитчей:
$ sudo ovs-vsctl add-br br0
$ sudo ovs-vsctl add-port br0 eth0
$ sudo ovs-vsctl del-port br0 eth0
$ sudo ovs-vsctl del-br br0

Как работает контроллер Floodlight
Или вывод на экран списка портов и коммутаторов:
$ sudo ovs-vsctl list-ports br0
$ sudo ovs-vsctl list-br

Приложение FlowScale на базе OpenFlow
И заканчивая такими, как управление QoS и пересылка статистики по протоколу NetFlow. Рассмотрим некоторые из них.
Туннелирование по протоколу GRE. Допустим, мы должны создать туннель между двумя удаленными машинами так, чтобы одна из конечных точек туннеля была портом коммутатора. Для этого добавляем дополнительный порт и назначаем ему тип «gre»:
$ sudo ovs-vsctl add-port br0 gre0 -- set Interface gre0 type=gre options:remote_ip=1.2.3.4Здесь следует пояснить небольшой синтаксический изврат утилиты ovs-vsctl. Как видишь, первая часть команды выглядит очень похожей на остальные, тогда как дальше начинается нечто напоминающее указание опций. На самом деле это не изменение опций, а модификация той самой базы данных конфигурации. С помощью команды set здесь происходит выбор таблицы Interface, которая хранит конфигурацию сетевых интерфейсов, закрепленных за портами. Далее происходит выборка записи «gre0», которая хранит конфигурацию нужного нам интерфейса и изменение двух ее колонок: type и options. При этом если в первом случае мы изменяем значение колонки type, указав, что теперь этот сетевой интерфейс будет конечной точкой тунkнеля, то во втором также используем ключ remote_ip, чтобы сообщить, какую именно опцию мы хотим изменить, а именно — адрес удаленной машины. По умолчанию база данных Open vSwitch содержит 13 таблиц, каждая из которых предназначена для изменения того или иного параметра свитча, к примеру QoS или Mirror. Каждая таблица содержит собственный набор колонок, и порой, как ты увидишь из следующего примера, управлять конфигурацией таким способом становится весьма проблематично, хотя при настройке таких простых вещей, как GRE-туннель, все кажется тривиальным.
Экспорт статистики по протоколам NetFlow и sFlow. Чтобы заставить коммутатор слать статистику по NetFlow на удаленный хост, потребуется создать дополнительную запись в таблице:
$ sudo ovs-vsctl -- set Bridge br0 netflow=@nf -- --id=@nf create NetFlow targets=\"192.168.0.34:5566\" active-timeout=30Логика этой команды следующая: мы берем запись br0 таблицы Bridge и изменяем колонку netflow, записывая в нее ссылку (UUID) на пока еще не существующую запись в таблице NetFlow. В следующей строке мы создаем новую запись в таблице NetFlow, адресуемую с помощью ссылки @nf, и прописываем в колонке targets адреса принимающих хостов, а в колонке active-timeout — время тайм-аута передачи в секундах. В любой момент конфигурацию можно изменить, например выставив другой тайм-аут:
$ sudo ovs-vsctl set NetFlow br0 active_timeout=60Или отменить передачу, очистив колонку netflow:
$ sudo ovs-vsctl clear Bridge br0 netflowЭкспорт статистики по sFlow настраивается почти таким же образом:
$ sudo ovs-vsctl -- --id=@s create sFlow agent=eth1 target=\"10.0.0.1:6343\" header=128 sampling=64 polling=10 -- set Bridge br0 sflow=@sОбрати внимание, что здесь мы вначале создали запись в таблице sFlow и лишь затем адресовали эту запись. Сама команда ovs-vsctl позволяет использовать и тот и другой варианты, поэтому ты можешь писать команды в той последовательности, какая тебе удобна.
Зеркалирование портов. Так, а что если мы хотим, чтобы все пакеты, пришедшие на порт eth0 или eth1, автоматически транслировались на порт eth2? В этом случае команда будет выглядеть еще более запутанно:
$ sudo ovs-vsctl -- set Bridge br0 mirrors=@m -- --id=@eth0 get Port eth0 -- --id=@eth1 get Port eth1 -- --id=@eth2 get Port eth2 -- --id=@m create Mirror name=mymirror -- select-dst-port=@eth0,@eth1 select-src-port=@eth0,@eth1 output-port=@eth2Здесь мы сначала присваиваем колонке mirrors записи br0 ссылку на запись в таблице Mirror, описанной в конце. Далее, чтобы мы смогли сослаться из еще не созданной записи на нужные нам порты, мы получаем ссылку на записи этих портов в таблице Port с помощью команды get. В конце создаем запись в таблице Mirror с названием mymirror и заполняем колонки нужными нам данными: select-dst-port — зеркалирование входящего трафика на порты @eth0 и @eth1, select-src-port — зеркалирование исходящего трафика, output-port — куда направлять этот трафик. В любой момент зеркалирование можно отменить:
$ sudo ovs-vsctl remove Bridge br0 mirrors mymirrorQoS. Управлением качеством обслуживания в Linux-версии Open vSwitch занимается подсистема Traffic Control, о которой я подробно писал в статье «Каждому по потребностям» (][ #7 2009). Управление в этом случае осуществляется с помощью одной из дисциплин TC. Например, чтобы настроить ширину канала на портах eth0 и eth1, можно использовать дисциплину HTB:
$ sudo ovs-vsctl -- set Port eth0 qos=@newqos -- set Port eth1 qos=@newqos -- --id=@newqos create QoS type=linux-htb other-config:max-rate=1000000000 queues=0=@q0,1=@q1 -- --id=@q0 create Queue other-config:min-rate=100000000 other-config:max-rate=100000000 -- --id=@q1 create Queue other-config:min-rate=500000000
$Здесь нам потребовалось создать одну новую запись в таблице QoS для управления суммарной шириной обоих каналов, а также две новых записи в таблице Queue для управления шириной канала для каждого порта. Если ты знаешь, как работает управление трафиком с помощью Traffic Control, то легко разберешься в этой конфигурации.

Онлайновая документация по настройке VLAN
Выводы
В этой статье я описал лишь малую толику того, что может Open vSwitch. В реальной ситуации, когда виртуальные окружения работают на целом кластере виртуальных машин, управлять всем этим оркестром с помощью одной лишь команды ovs-vsctl уже не получится, зато можно будет использовать контроллер OpenFlow, но это тема для отдельной статьи. z
INFO
Open vSwitch активно используется в коммерческой платформе Xen Cloud.
Подробнее: http://www.xakep.ru/post/59656/default.asp
|
Виртуальный коммутатор Open vSwitch: обзор возможностей и применение Эра облачных вычислений постепенно вошла в нашу жизнь, принеся с собой множество плюсов для системных администраторов, которые |
РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2025-12-02 » Когда ошибка молчит: как бессмысленные сообщения ломают пользовательский опыт
- 2025-12-02 » 9 лучших бесплатных фотостоков
- 2025-12-02 » UTM-метки: ключевой инструмент аналитики для маркетолога
- 2025-12-02 » ПромоСтраницы Яндекса: Что такое и для чего служит
- 2025-12-02 » Метатеги для сайта: исчерпывающее руководство по Title, Description, Canonical, Robots и другим тегам
- 2025-11-26 » Оценка эффективности контента: превращаем информационный балласт в рабочий актив
- 2025-11-26 » 10 причин высокого показателя отказов на сайте
- 2025-11-26 » Когда и зачем обновлять структуру сайта
- 2025-11-26 » Скрытые демотиваторы: как мелочи разрушают эффективность команды
- 2025-11-26 » Зачем запускать MVP и как сделать это грамотно?
- 2025-11-20 » Половина российских компаний сократит расходы на транспорт и маркетинг в 2026 году
- 2025-11-20 » Перенос сайта с большим количеством ссылок
- 2025-11-20 » Перелинковка сайта: Что такое и как ее использовать
- 2025-11-20 » Критерии выбора SEO-специалиста и подрядчика для продвижения сайта
- 2025-11-20 » Применение искусственного интеллекта в рекламных агентствах: комплексное исследование трендов 2025 года
- 2025-11-19 » Геозапросы по-новому: как покорить локальное SEO с помощью ИИ
- 2025-11-14 » Консалтинг: сущность и ключевые направления
- 2025-11-14 » Онлайн-формы: универсальный инструмент для сбора обратной связи
- 2025-11-14 » Факторы конверсии органического трафика
- 2025-11-14 » Планирование рекламного бюджета: самостоятельный подход
- 2025-11-14 » Авторизация на сайте: как выбрать решение для удержания клиентов и сохранения продаж
- 2025-11-13 » Эффективные методы стимулирования клиентов к оставлению положительных отзывов
- 2025-11-13 » Налоговая реформа — 2026: грядущие изменения для предпринимателей
- 2025-11-13 » Альтернативы мессенджерам: что выбрать вместо Telegram и WhatsApp
- 2025-11-13 » Маркировка рекламы для начинающих: полное руководство по требованиям ЕРИР
- 2025-11-13 » ИИ не отберет вашу работу — её займет специалист, владеющий искусственным интеллектом
- 2025-10-29 » Как оценить эффективность работы SEO-специалиста: практическое руководство для маркетологов и владельцев бизнеса
- 2025-10-29 » Киберспорт как маркетинговый инструмент: стратегии привлечения геймеров
- 2025-10-29 » Как говорить с аудиторией о сложном
- 2025-10-29 » Что такое доказательства с нулевым разглашением (ZKP) и их роль в блокчейне
Человек - аристократ среди животных Гейне Генрих - (1797-1856) - немецкий поэт и публицист |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.







Мы создаем практически любые сайты от продающих страниц до сложных, высоконагруженных и нестандартных веб приложений! Наши сайты это надежные маркетинговые инструменты для успеха Вашего бизнеса и увеличения вашей прибыли! Мы делаем красивые и максимально эффектные сайты по доступным ценам уже много лет!
Комплексный подход это не просто продвижение сайта, это целый комплекс мероприятий, который определяется целями и задачами поставленными перед сайтом и организацией, которая за этим стоит. Время однобоких методов в продвижении сайтов уже прошло, конкуренция слишком высока, чтобы была возможность расслабиться и получать \ удерживать клиентов из Интернета, просто сделав сайт и не занимаясь им...
Мы оказываем полный комплекс услуг по сопровождению сайта: информационному и техническому обслуживанию и развитию Интернет сайтов.
Контекстная реклама - это эффективный инструмент в интернет маркетинге, целью которого является увеличение продаж. Главный плюс контекстной рекламы заключается в том, что она работает избирательно.